mruby 4.0.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
mruby.h
Go to the documentation of this file.
1/*
2** mruby - An embeddable Ruby implementation
3**
4** Copyright (c) mruby developers 2010-
5**
6** Permission is hereby granted, free of charge, to any person obtaining
7** a copy of this software and associated documentation files (the
8** "Software"), to deal in the Software without restriction, including
9** without limitation the rights to use, copy, modify, merge, publish,
10** distribute, sublicense, and/or sell copies of the Software, and to
11** permit persons to whom the Software is furnished to do so, subject to
12** the following conditions:
13**
14** The above copyright notice and this permission notice shall be
15** included in all copies or substantial portions of the Software.
16**
17** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24**
25** [ MIT license: https://www.opensource.org/licenses/mit-license.php ]
26*/
27
31
32#ifndef MRUBY_H
33#define MRUBY_H
34
35#ifdef __cplusplus
36#define __STDC_LIMIT_MACROS
37#define __STDC_CONSTANT_MACROS
38#define __STDC_FORMAT_MACROS
39#endif
40
41#include <stdarg.h>
42#include <stdint.h>
43#include <stddef.h>
44#include <limits.h>
45
46#ifdef __cplusplus
47#ifndef UINTPTR_MAX
48#error Must be placed `#include <mruby.h>` before `#include <stdint.h>`
49#endif
50#ifndef SIZE_MAX
51#ifdef __SIZE_MAX__
52#define SIZE_MAX __SIZE_MAX__
53#else
54#define SIZE_MAX std::numeric_limits<size_t>::max()
55#endif
56#endif
57#endif
58
59#ifdef _MSC_VER
60# define __func__ __FUNCTION__
61#endif
62
63#ifdef MRB_DEBUG
64#include <assert.h>
65#define mrb_assert(p) assert(p)
66#define mrb_assert_int_fit(t1,n,t2,max) assert((n)>=0 && ((sizeof(n)<=sizeof(t2))||(n<=(t1)(max))))
67#else
68#define mrb_assert(p) ((void)0)
69#define mrb_assert_int_fit(t1,n,t2,max) ((void)0)
70#endif
71
72#if (defined __cplusplus && __cplusplus >= 201703L)
73# define mrb_static_assert(...) static_assert(__VA_ARGS__)
74# define mrb_static_assert1(exp) static_assert(exp)
75# define mrb_static_assert2(exp, str) static_assert(exp, str)
76#elif (defined __cplusplus && __cplusplus >= 201103L) || \
77 (defined _MSC_VER) || \
78 (defined __GXX_EXPERIMENTAL_CXX0X__) /* for old G++/Clang++ */
79# define mrb_static_assert2(exp, str) static_assert(exp, str)
80#elif defined __STDC_VERSION__ && \
81 ((__STDC_VERSION__ >= 201112L) || \
82 (defined __GNUC__ && __GNUC__ * 100 + __GNUC_MINOR__ >= 406))
83# define mrb_static_assert2(exp, str) _Static_assert(exp, str)
84#else
85# /* alternative implementation of static_assert() */
86# define _mrb_static_assert_cat0(a, b) a##b
87# define _mrb_static_assert_cat(a, b) _mrb_static_assert_cat0(a, b)
88# ifdef __COUNTER__
89# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __COUNTER__)
90# else
91# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __LINE__)
92# endif
93# define mrb_static_assert2(exp, str) \
94 struct _mrb_static_assert_id(_mrb_static_assert_) { char x[(exp) ? 1 : -1]; }
95#endif
96
97#ifndef mrb_static_assert
98# define mrb_static_assert1(exp) mrb_static_assert2(exp, #exp)
99# define mrb_static_assert_expand(...) __VA_ARGS__ /* for MSVC behaviour - https://stackoverflow.com/q/5530505 */
100# define mrb_static_assert_selector(a, b, name, ...) name
108# define mrb_static_assert(...) \
109 mrb_static_assert_expand(mrb_static_assert_selector(__VA_ARGS__, mrb_static_assert2, mrb_static_assert1, _)(__VA_ARGS__))
110#endif
111
112#define mrb_static_assert_powerof2(num) mrb_static_assert((num) > 0 && (num) == ((num) & -(num)), "need power of 2 for " #num)
113
114#include "mrbconf.h"
115
116typedef struct mrb_state mrb_state;
117
118#include <mruby/common.h>
119#include <mruby/value.h>
120#include <mruby/gc.h>
121#include <mruby/version.h>
122
123#ifndef MRB_NO_FLOAT
124#include <math.h>
125#include <float.h>
126#ifndef FLT_EPSILON
127#define FLT_EPSILON (1.19209290e-07f)
128#endif
129#ifndef DBL_EPSILON
130#define DBL_EPSILON ((double)2.22044604925031308085e-16L)
131#endif
132#ifndef LDBL_EPSILON
133#define LDBL_EPSILON (1.08420217248550443401e-19L)
134#endif
135
136#ifdef MRB_USE_FLOAT32
137#define MRB_FLOAT_EPSILON FLT_EPSILON
138#else
139#define MRB_FLOAT_EPSILON DBL_EPSILON
140#endif
141#endif
142
147
148typedef uint8_t mrb_code;
149
157typedef uint32_t mrb_aspec;
158
159typedef struct mrb_irep mrb_irep;
160
161#ifndef MRB_FIXED_STATE_ATEXIT_STACK_SIZE
162#define MRB_FIXED_STATE_ATEXIT_STACK_SIZE 5
163#endif
164
165typedef struct {
166 uint8_t n:4; /* (15=*) c=n|nk<<4 */
167 uint8_t nk:4; /* (15=*) */
168 uint8_t cci; /* called from C function */
169 uint8_t vis; /* 5(ZERO):1(separate module):2(method visibility) */
170 /* under 3-bit flags are copied to env, and after that, env takes precedence */
171 mrb_sym mid;
172 const struct RProc *proc;
173 struct RProc *blk;
174 mrb_value *stack;
175 const mrb_code *pc; /* current address on iseq of this proc */
176 union {
177 struct REnv *env;
178 struct RClass *target_class;
179 const void *keep_context; /* if NULL, it means that the fiber has switched; for internal use */
180 } u;
182
183enum mrb_fiber_state {
184 MRB_FIBER_CREATED = 0,
185 MRB_FIBER_RUNNING,
186 MRB_FIBER_RESUMED,
187 MRB_FIBER_SUSPENDED,
188 MRB_FIBER_TRANSFERRED,
189 MRB_FIBER_TERMINATED,
190};
191
192/* Task context status aliases */
193#define MRB_TASK_CREATED MRB_FIBER_CREATED
194#define MRB_TASK_STOPPED MRB_FIBER_TERMINATED
195
197 struct mrb_context *prev;
198
199 mrb_value *stbase, *stend; /* stack of virtual machine */
200
201 mrb_callinfo *ci;
202 mrb_callinfo *cibase, *ciend;
203
204 enum mrb_fiber_state status : 4;
205 mrb_bool vmexec : 1;
206 struct RFiber *fib;
207};
208
209#ifdef MRB_METHOD_CACHE_SIZE
210# undef MRB_NO_METHOD_CACHE
211mrb_static_assert_powerof2(MRB_METHOD_CACHE_SIZE);
212#else
213/* default method cache size: 256 */
214/* cache size needs to be power of 2 */
215# define MRB_METHOD_CACHE_SIZE (1<<8)
216#endif
217
228
229typedef struct {
230 uint32_t flags; /* method flags (no symbol packed) */
231
232 union {
233 const struct RProc *proc;
234 mrb_func_t func;
235 } as;
237
238#ifndef MRB_NO_METHOD_CACHE
240 struct RClass *c, *c0;
241 mrb_sym mid;
242 mrb_method_t m;
243};
244#endif
245
246#ifdef MRB_CONST_CACHE_SIZE
247# undef MRB_NO_CONST_CACHE
248mrb_static_assert_powerof2(MRB_CONST_CACHE_SIZE);
249#else
250/* default constant cache size: 64 */
251/* cache size needs to be power of 2 */
252# define MRB_CONST_CACHE_SIZE (1<<6)
253#endif
254
255#ifndef MRB_NO_CONST_CACHE
257 const struct mrb_irep *irep;
258 mrb_sym sym;
259 mrb_value value;
260};
261#endif
262
263struct mrb_jmpbuf;
264
265typedef void (*mrb_atexit_func)(mrb_state*);
266
267#ifdef MRB_USE_TASK_SCHEDULER
268struct mrb_task;
269
270typedef struct mrb_task_state {
271 struct mrb_task *queues[4]; /* Task queues (dormant, ready, waiting, suspended) */
272 volatile uint32_t tick; /* Current tick count */
273 volatile uint32_t wakeup_tick; /* Next wakeup tick */
274 volatile mrb_bool switching; /* Context switch pending flag */
275 struct mrb_task *main_task; /* Main task wrapper for root context */
276 uint8_t scheduler_lock; /* Lock counter for synchronous execution */
277} mrb_task_state;
278#endif
279
280struct mrb_state {
281 struct mrb_jmpbuf *jmp;
282
283 struct mrb_context *c;
284 struct mrb_context *root_c;
285 struct iv_tbl *globals; /* global variable table */
286
287 struct RObject *exc; /* exception */
288
289 struct RObject *top_self;
290 struct RClass *object_class; /* Object class */
291 struct RClass *class_class;
292 struct RClass *module_class;
293 struct RClass *proc_class;
294 struct RClass *string_class;
295 struct RClass *array_class;
296 struct RClass *hash_class;
297 struct RClass *range_class;
298
299#ifndef MRB_NO_FLOAT
300 struct RClass *float_class;
301#endif
302 struct RClass *integer_class;
303 struct RClass *true_class;
304 struct RClass *false_class;
305 struct RClass *nil_class;
306 struct RClass *symbol_class;
307 struct RClass *kernel_module;
308
309 mrb_gc gc;
310
311 mrb_bool bootstrapping;
312
313#ifndef MRB_NO_METHOD_CACHE
314 struct mrb_cache_entry cache[MRB_METHOD_CACHE_SIZE];
315#endif
316
317#ifndef MRB_NO_CONST_CACHE
318 struct mrb_const_cache_entry const_cache[MRB_CONST_CACHE_SIZE];
319#endif
320
321 mrb_sym symidx;
322 const char **symtbl;
323 uint8_t *sym_flags; /* per-symbol flags (SYM_FL_*) */
324 size_t symcapa;
325 struct mrb_sym_hash_table *symhash;
326 void *sym_pool;
327 mrb_sym dynamic_sym_count; /* count of dynamic (GC-candidate) symbols */
328#ifndef MRB_USE_ALL_SYMBOLS
329 char symbuf[8]; /* buffer for small symbol names */
330#endif
331
332#ifdef MRB_USE_DEBUG_HOOK
333 void (*code_fetch_hook)(mrb_state* mrb, const struct mrb_irep *irep, const mrb_code *pc, mrb_value *regs);
334 void (*debug_op_hook)(mrb_state* mrb, const struct mrb_irep *irep, const mrb_code *pc, mrb_value *regs);
335#endif
336
337#ifdef MRB_BYTECODE_DECODE_OPTION
338 mrb_code (*bytecode_decoder)(mrb_state* mrb, mrb_code code);
339#endif
340
341 struct RClass *eException_class;
342 struct RClass *eStandardError_class;
343 struct RObject *nomem_err; /* pre-allocated NoMemoryError */
344 struct RObject *stack_err; /* pre-allocated SystemStackError */
345#ifdef MRB_GC_FIXED_ARENA
346 struct RObject *arena_err; /* pre-allocated arena overflow error */
347#endif
348
349 struct mrb_mt_rom_list *rom_mt; /* heap-allocated ROM wrappers (freed at close) */
350
351 struct mrb_iv_shape *root_shape; /* root of IV shape tree */
352
353 void *ud; /* auxiliary data */
354
355#ifdef MRB_FIXED_STATE_ATEXIT_STACK
356 mrb_atexit_func atexit_stack[MRB_FIXED_STATE_ATEXIT_STACK_SIZE];
357#else
358 mrb_atexit_func *atexit_stack;
359#endif
360 uint16_t atexit_stack_len;
361
362#ifdef MRB_USE_TASK_SCHEDULER
363 mrb_task_state task; /* Task scheduler state */
364#endif
365};
366
388MRB_API struct RClass *mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super);
389MRB_API struct RClass *mrb_define_class_id(mrb_state *mrb, mrb_sym name, struct RClass *super);
390
398MRB_API struct RClass *mrb_define_module(mrb_state *mrb, const char *name);
399MRB_API struct RClass *mrb_define_module_id(mrb_state *mrb, mrb_sym name);
400
407
414
426MRB_API void mrb_include_module(mrb_state *mrb, struct RClass *cla, struct RClass *included);
427
439MRB_API void mrb_prepend_module(mrb_state *mrb, struct RClass *cla, struct RClass *prepended);
440
465
466MRB_API void mrb_define_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec);
467MRB_API void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
468MRB_API void mrb_define_private_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec);
469MRB_API void mrb_define_private_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
470
496MRB_API void mrb_define_class_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec);
497MRB_API void mrb_define_class_method_id(mrb_state *mrb, struct RClass *cla, mrb_sym name, mrb_func_t fun, mrb_aspec aspec);
498
504MRB_API void mrb_define_singleton_method(mrb_state *mrb, struct RObject *cla, const char *name, mrb_func_t fun, mrb_aspec aspec);
505MRB_API void mrb_define_singleton_method_id(mrb_state *mrb, struct RObject *cla, mrb_sym name, mrb_func_t fun, mrb_aspec aspec);
506
532MRB_API void mrb_define_module_function(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec);
533MRB_API void mrb_define_module_function_id(mrb_state *mrb, struct RClass *cla, mrb_sym name, mrb_func_t fun, mrb_aspec aspec);
534
561MRB_API void mrb_define_const(mrb_state* mrb, struct RClass* cla, const char *name, mrb_value val);
562MRB_API void mrb_define_const_id(mrb_state* mrb, struct RClass* cla, mrb_sym name, mrb_value val);
563
612MRB_API void mrb_undef_method(mrb_state *mrb, struct RClass *cla, const char *name);
613MRB_API void mrb_undef_method_id(mrb_state*, struct RClass*, mrb_sym);
614
652MRB_API void mrb_undef_class_method(mrb_state *mrb, struct RClass *cls, const char *name);
653MRB_API void mrb_undef_class_method_id(mrb_state *mrb, struct RClass *cls, mrb_sym name);
654
683MRB_API mrb_value mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *argv);
684
686MRB_INLINE mrb_value mrb_class_new_instance(mrb_state *mrb, mrb_int argc, const mrb_value *argv, struct RClass *c)
687{
688 return mrb_obj_new(mrb,c,argc,argv);
689}
690
710MRB_API struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super);
711
727
754MRB_API mrb_bool mrb_class_defined(mrb_state *mrb, const char *name);
755MRB_API mrb_bool mrb_class_defined_id(mrb_state *mrb, mrb_sym name);
756
763MRB_API struct RClass* mrb_class_get(mrb_state *mrb, const char *name);
764MRB_API struct RClass* mrb_class_get_id(mrb_state *mrb, mrb_sym name);
765
772MRB_API struct RClass* mrb_exc_get_id(mrb_state *mrb, mrb_sym name);
773#define mrb_exc_get(mrb, name) mrb_exc_get_id(mrb, mrb_intern_cstr(mrb, name))
774
804MRB_API mrb_bool mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name);
805MRB_API mrb_bool mrb_class_defined_under_id(mrb_state *mrb, struct RClass *outer, mrb_sym name);
806
814MRB_API struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
815MRB_API struct RClass * mrb_class_get_under_id(mrb_state *mrb, struct RClass *outer, mrb_sym name);
816
823MRB_API struct RClass * mrb_module_get(mrb_state *mrb, const char *name);
824MRB_API struct RClass * mrb_module_get_id(mrb_state *mrb, mrb_sym name);
825
833MRB_API struct RClass * mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
834MRB_API struct RClass * mrb_module_get_under_id(mrb_state *mrb, struct RClass *outer, mrb_sym name);
835
836/* a function to raise NotImplementedError with current method name */
837MRB_API void mrb_notimplement(mrb_state*);
838/* a function to be replacement of unimplemented method */
839MRB_API mrb_value mrb_notimplement_m(mrb_state*, mrb_value);
840/* just return it self */
841MRB_API mrb_value mrb_obj_itself(mrb_state*, mrb_value);
842
853
894MRB_API mrb_bool mrb_obj_respond_to(mrb_state *mrb, struct RClass* c, mrb_sym mid);
895
906MRB_API struct RClass* mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, struct RClass *super);
907MRB_API struct RClass* mrb_define_class_under_id(mrb_state *mrb, struct RClass *outer, mrb_sym name, struct RClass *super);
908
909MRB_API struct RClass* mrb_define_module_under(mrb_state *mrb, struct RClass *outer, const char *name);
910MRB_API struct RClass* mrb_define_module_under_id(mrb_state *mrb, struct RClass *outer, mrb_sym name);
911
918#define MRB_ARGS_REQ(n) ((mrb_aspec)((n)&0x1f) << 18)
919
926#define MRB_ARGS_OPT(n) ((mrb_aspec)((n)&0x1f) << 13)
927
936#define MRB_ARGS_ARG(n1,n2) (MRB_ARGS_REQ(n1)|MRB_ARGS_OPT(n2))
937
939#define MRB_ARGS_REST() ((mrb_aspec)(1 << 12))
940
942#define MRB_ARGS_POST(n) ((mrb_aspec)((n)&0x1f) << 7)
943
945#define MRB_ARGS_KEY(n1,n2) ((mrb_aspec)((((n1)&0x1f) << 2) | ((n2)?(1<<1):0)))
946
950#define MRB_ARGS_BLOCK() ((mrb_aspec)1)
951
955#define MRB_ARGS_NOBLOCK() ((mrb_aspec)(1 << 23))
956
960#define MRB_ARGS_ANY() MRB_ARGS_REST()
961
965#define MRB_ARGS_NONE() ((mrb_aspec)0)
966
1004typedef const char *mrb_args_format;
1005
1052typedef struct mrb_kwargs mrb_kwargs;
1053
1055{
1056 mrb_int num; /* number of keyword arguments */
1057 mrb_int required; /* number of required keyword arguments */
1058 const mrb_sym *table; /* C array of symbols for keyword names */
1059 mrb_value *values; /* keyword argument values */
1060 mrb_value *rest; /* keyword rest (dict) */
1061};
1062
1073MRB_API mrb_int mrb_get_args(mrb_state *mrb, mrb_args_format format, ...);
1074
1080MRB_API mrb_int mrb_get_args_a(mrb_state *mrb, mrb_args_format format, void** ptr);
1081
1083mrb_get_mid(mrb_state *mrb) /* get method symbol */
1084{
1085 return mrb->c->ci->mid;
1086}
1087
1093MRB_API mrb_int mrb_get_argc(mrb_state *mrb);
1094
1101
1109
1113MRB_API mrb_bool mrb_block_given_p(mrb_state *mrb);
1114
1115/* `strlen` for character string literals (use with caution or `strlen` instead)
1116 Adjacent string literals are concatenated in C/C++ in translation phase 6.
1117 If `lit` is not one, the compiler will report a syntax error:
1118 MSVC: "error C2143: syntax error : missing ')' before 'string'"
1119 GCC: "error: expected ')' before string constant"
1120*/
1121#define mrb_strlen_lit(lit) (sizeof(lit "") - 1)
1122
1154MRB_API mrb_value mrb_funcall(mrb_state *mrb, mrb_value val, const char *name, mrb_int argc, ...);
1155MRB_API mrb_value mrb_funcall_id(mrb_state *mrb, mrb_value val, mrb_sym mid, mrb_int argc, ...);
1184MRB_API mrb_value mrb_funcall_argv(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv);
1185/*
1186 * Convenience wrappers for `mrb_funcall_argv` with a fixed argument count.
1187 * Avoids the 16-slot fixed argv buffer used by the variadic `mrb_funcall_id`.
1188 */
1189static inline mrb_value
1190mrb_funcall_argv1(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_value a1)
1191{
1192 return mrb_funcall_argv(mrb, val, name, 1, &a1);
1193}
1194static inline mrb_value
1195mrb_funcall_argv2(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_value a1, mrb_value a2)
1196{
1197 const mrb_value argv[] = { a1, a2 };
1198 return mrb_funcall_argv(mrb, val, name, 2, argv);
1199}
1203MRB_API mrb_value mrb_funcall_with_block(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv, mrb_value block);
1223MRB_API mrb_sym mrb_intern_cstr(mrb_state *mrb, const char* str);
1224MRB_API mrb_sym mrb_intern(mrb_state*,const char*,size_t);
1225MRB_API mrb_sym mrb_intern_static(mrb_state*,const char*,size_t);
1226#define mrb_intern_lit(mrb, lit) mrb_intern_static(mrb, (lit ""), mrb_strlen_lit(lit))
1227MRB_API mrb_sym mrb_intern_str(mrb_state*,mrb_value);
1228/* mrb_intern_check series functions returns 0 if the symbol is not defined */
1229MRB_API mrb_sym mrb_intern_check_cstr(mrb_state*,const char*);
1230MRB_API mrb_sym mrb_intern_check(mrb_state*,const char*,size_t);
1231MRB_API mrb_sym mrb_intern_check_str(mrb_state*,mrb_value);
1232/* mrb_check_intern series functions returns nil if the symbol is not defined */
1233/* otherwise returns mrb_value */
1234MRB_API mrb_value mrb_check_intern_cstr(mrb_state*,const char*);
1235MRB_API mrb_value mrb_check_intern(mrb_state*,const char*,size_t);
1236MRB_API mrb_value mrb_check_intern_str(mrb_state*,mrb_value);
1237MRB_API const char *mrb_sym_name(mrb_state*,mrb_sym);
1238MRB_API const char *mrb_sym_name_len(mrb_state*,mrb_sym,mrb_int*);
1239MRB_API const char *mrb_sym_dump(mrb_state*,mrb_sym);
1240MRB_API mrb_value mrb_sym_str(mrb_state*,mrb_sym);
1241#define mrb_sym2name(mrb,sym) mrb_sym_name(mrb,sym)
1242#define mrb_sym2name_len(mrb,sym,len) mrb_sym_name_len(mrb,sym,len)
1243#define mrb_sym2str(mrb,sym) mrb_sym_str(mrb,sym)
1244
1245MRB_API void *mrb_malloc(mrb_state*, size_t); /* raise RuntimeError if no mem */
1246MRB_API void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */
1247MRB_API void *mrb_realloc(mrb_state*, void*, size_t); /* ditto */
1248MRB_API void *mrb_realloc_simple(mrb_state*, void*, size_t); /* return NULL if no memory available */
1249MRB_API void *mrb_malloc_simple(mrb_state*, size_t); /* return NULL if no memory available */
1250MRB_API struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*);
1251MRB_API void mrb_free(mrb_state*, void*);
1252
1262#define MRB_OBJ_ALLOC(mrb, tt, klass) ((MRB_VTYPE_TYPEOF(tt)*)mrb_obj_alloc(mrb, tt, klass))
1263
1264MRB_API mrb_value mrb_str_new(mrb_state *mrb, const char *p, mrb_int len);
1265
1270MRB_API mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, mrb_int len);
1271#define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), mrb_strlen_lit(lit))
1272
1273MRB_API mrb_value mrb_obj_freeze(mrb_state*, mrb_value);
1274#define mrb_str_new_frozen(mrb,p,len) mrb_obj_freeze(mrb,mrb_str_new(mrb,p,len))
1275#define mrb_str_new_cstr_frozen(mrb,p) mrb_obj_freeze(mrb,mrb_str_new_cstr(mrb,p))
1276#define mrb_str_new_static_frozen(mrb,p,len) mrb_obj_freeze(mrb,mrb_str_new_static(mrb,p,len))
1277#define mrb_str_new_lit_frozen(mrb,lit) mrb_obj_freeze(mrb,mrb_str_new_lit(mrb,lit))
1278
1279#ifdef _WIN32
1280MRB_API char* mrb_utf8_from_locale(const char *p, int len);
1281MRB_API char* mrb_locale_from_utf8(const char *p, int len);
1282#define mrb_locale_free(p) free(p)
1283#define mrb_utf8_free(p) free(p)
1284#else
1285#define mrb_utf8_from_locale(p, l) ((char*)(p))
1286#define mrb_locale_from_utf8(p, l) ((char*)(p))
1287#define mrb_locale_free(p)
1288#define mrb_utf8_free(p)
1289#endif
1290
1298
1312
1319MRB_API void mrb_close(mrb_state *mrb);
1320#ifndef MRB_NO_METHOD_CACHE
1321MRB_API void mrb_method_cache_clear(mrb_state *mrb);
1322#else
1323#define mrb_method_cache_clear(mrb) ((void)0)
1324#endif
1325#ifndef MRB_NO_CONST_CACHE
1326void mrb_const_cache_clear(mrb_state *mrb);
1327#else
1328#define mrb_const_cache_clear(mrb) ((void)0)
1329#endif
1330
1352#define MRB_OPEN_FAILURE(mrb) (!(mrb) || (mrb)->exc)
1353
1362#define MRB_OPEN_SUCCESS(mrb) (!MRB_OPEN_FAILURE(mrb))
1363
1368MRB_API void* mrb_basic_alloc_func(void*, size_t);
1369
1370MRB_API mrb_value mrb_top_self(mrb_state *mrb);
1371
1392MRB_API mrb_value mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep);
1393
1394MRB_API mrb_value mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep);
1395MRB_API mrb_value mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *iseq);
1396/* compatibility macros */
1397#define mrb_toplevel_run_keep(m,p,k) mrb_top_run((m),(p),mrb_top_self(m),(k))
1398#define mrb_toplevel_run(m,p) mrb_toplevel_run_keep((m),(p),0)
1399#define mrb_context_run(m,p,s,k) mrb_vm_run((m),(p),(s),(k))
1400
1401MRB_API void mrb_p(mrb_state*, mrb_value);
1402MRB_API mrb_int mrb_obj_id(mrb_value obj);
1403MRB_API mrb_sym mrb_obj_to_sym(mrb_state *mrb, mrb_value name);
1404
1405MRB_API mrb_bool mrb_obj_eq(mrb_state *mrb, mrb_value a, mrb_value b);
1406MRB_API mrb_bool mrb_obj_equal(mrb_state *mrb, mrb_value a, mrb_value b);
1407MRB_API mrb_bool mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
1408#ifndef MRB_NO_FLOAT
1409MRB_API mrb_value mrb_ensure_float_type(mrb_state *mrb, mrb_value val);
1410#define mrb_as_float(mrb, x) mrb_float(mrb_ensure_float_type(mrb, x))
1411/* obsolete: use mrb_ensure_float_type() instead */
1412#define mrb_to_float(mrb, val) mrb_ensure_float_type(mrb, val)
1413#endif
1414MRB_API mrb_value mrb_inspect(mrb_state *mrb, mrb_value obj);
1415MRB_API mrb_bool mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
1416/* mrb_cmp(mrb, obj1, obj2): 1:0:-1; -2 for error */
1417MRB_API mrb_int mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
1418
1419/* recursion detection */
1420MRB_API mrb_bool mrb_recursive_method_p(mrb_state *mrb, mrb_sym mid, mrb_value obj1, mrb_value obj2);
1421MRB_API mrb_bool mrb_recursive_func_p(mrb_state *mrb, mrb_sym mid, mrb_value obj1, mrb_value obj2);
1422
1423#define MRB_RECURSIVE_P(mrb, mid, obj1, obj2) \
1424 mrb_recursive_method_p(mrb, mid, obj1, obj2)
1425
1426#define MRB_RECURSIVE_UNARY_P(mrb, mid, obj) \
1427 mrb_recursive_method_p(mrb, mid, obj, mrb_nil_value())
1428
1429#define MRB_RECURSIVE_BINARY_P(mrb, mid, obj1, obj2) \
1430 mrb_recursive_method_p(mrb, mid, obj1, obj2)
1431
1432#define MRB_RECURSIVE_FUNC_P(mrb, mid, obj) \
1433 mrb_recursive_func_p(mrb, mid, obj, mrb_nil_value())
1434
1435#define MRB_RECURSIVE_BINARY_FUNC_P(mrb, mid, obj1, obj2) \
1436 mrb_recursive_func_p(mrb, mid, obj1, obj2)
1437
1438#define mrb_gc_arena_save(mrb) ((mrb)->gc.arena_idx)
1439#define mrb_gc_arena_restore(mrb, idx) ((mrb)->gc.arena_idx = (idx))
1440
1441MRB_API void mrb_garbage_collect(mrb_state*);
1442MRB_API void mrb_full_gc(mrb_state*);
1443MRB_API void mrb_incremental_gc(mrb_state*);
1444MRB_API void mrb_gc_mark(mrb_state*,struct RBasic*);
1445#define mrb_gc_mark_value(mrb,val) do {\
1446 if (!mrb_immediate_p(val)) mrb_gc_mark((mrb), mrb_basic_ptr(val)); \
1447} while (0)
1448MRB_API void mrb_field_write_barrier(mrb_state*, struct RBasic*, struct RBasic*);
1449#define mrb_field_write_barrier_value(mrb, obj, val) do{\
1450 if (!mrb_immediate_p(val)) mrb_field_write_barrier((mrb), (obj), mrb_basic_ptr(val)); \
1451} while (0)
1452MRB_API void mrb_write_barrier(mrb_state *, struct RBasic*);
1453
1454MRB_API mrb_value mrb_type_convert(mrb_state *mrb, mrb_value val, enum mrb_vtype type, mrb_sym method);
1455#define mrb_convert_type(mrb, val, type, tname, method) mrb_type_convert(mrb, val, type, mrb_intern_lit(mrb, method))
1456MRB_API mrb_value mrb_type_convert_check(mrb_state *mrb, mrb_value val, enum mrb_vtype type, mrb_sym method);
1457#define mrb_check_convert_type(mrb, val, type, tname, method) mrb_type_convert_check(mrb, val, type, mrb_intern_lit(mrb, method))
1458
1459MRB_API mrb_value mrb_any_to_s(mrb_state *mrb, mrb_value obj);
1460MRB_API const char * mrb_obj_classname(mrb_state *mrb, mrb_value obj);
1461MRB_API struct RClass* mrb_obj_class(mrb_state *mrb, mrb_value obj);
1462MRB_API mrb_value mrb_class_path(mrb_state *mrb, struct RClass *c);
1463MRB_API mrb_bool mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c);
1464MRB_API mrb_value mrb_obj_inspect(mrb_state *mrb, mrb_value self);
1465MRB_API mrb_value mrb_obj_clone(mrb_state *mrb, mrb_value self);
1466
1467#ifndef ISPRINT
1468#define ISASCII(c) ((unsigned)(c) <= 0x7f)
1469#define ISPRINT(c) (((unsigned)(c) - 0x20) < 0x5f)
1470#define ISSPACE(c) ((c) == ' ' || (unsigned)(c) - '\t' < 5)
1471#define ISUPPER(c) (((unsigned)(c) - 'A') < 26)
1472#define ISLOWER(c) (((unsigned)(c) - 'a') < 26)
1473#define ISALPHA(c) ((((unsigned)(c) | 0x20) - 'a') < 26)
1474#define ISDIGIT(c) (((unsigned)(c) - '0') < 10)
1475#define ISXDIGIT(c) (ISDIGIT(c) || ((unsigned)(c) | 0x20) - 'a' < 6)
1476#define ISALNUM(c) (ISALPHA(c) || ISDIGIT(c))
1477#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
1478#define ISCNTRL(c) ((unsigned)(c) < 0x20 || (c) == 0x7f)
1479#define TOUPPER(c) (ISLOWER(c) ? ((c) & 0x5f) : (c))
1480#define TOLOWER(c) (ISUPPER(c) ? ((c) | 0x20) : (c))
1481#endif
1482
1483MRB_API mrb_value mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, mrb_int len);
1484MRB_API mrb_noreturn void mrb_exc_raise(mrb_state *mrb, mrb_value exc);
1485
1486MRB_API mrb_noreturn void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg);
1487MRB_API mrb_noreturn void mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...);
1488MRB_API mrb_noreturn void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...);
1489MRB_API mrb_noreturn void mrb_frozen_error(mrb_state *mrb, void *frozen_obj);
1490MRB_API mrb_noreturn void mrb_argnum_error(mrb_state *mrb, mrb_int argc, int min, int max);
1491MRB_API void mrb_warn(mrb_state *mrb, const char *fmt, ...);
1492MRB_API mrb_noreturn void mrb_bug(mrb_state *mrb, const char *mesg);
1493MRB_API void mrb_print_backtrace(mrb_state *mrb);
1494MRB_API void mrb_print_error(mrb_state *mrb);
1495/* function for `raisef` formatting */
1496MRB_API mrb_value mrb_vformat(mrb_state *mrb, const char *format, va_list ap);
1497
1498/* macros to get typical exception objects
1499 note:
1500 + those E_* macros requires mrb_state* variable named mrb.
1501 + exception objects obtained from those macros are local to mrb
1502*/
1503#define MRB_ERROR_SYM(sym) mrb_intern_lit(mrb, #sym)
1504#define E_EXCEPTION mrb->eException_class
1505#define E_STANDARD_ERROR mrb->eStandardError_class
1506#define E_RUNTIME_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(RuntimeError))
1507#define E_TYPE_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(TypeError))
1508#define E_ZERODIV_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(ZeroDivisionError))
1509#define E_ARGUMENT_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(ArgumentError))
1510#define E_INDEX_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(IndexError))
1511#define E_RANGE_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(RangeError))
1512#define E_NAME_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(NameError))
1513#define E_NOMETHOD_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(NoMethodError))
1514#define E_SCRIPT_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(ScriptError))
1515#define E_SYNTAX_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(SyntaxError))
1516#define E_LOCALJUMP_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(LocalJumpError))
1517#define E_REGEXP_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(RegexpError))
1518#define E_FROZEN_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(FrozenError))
1519#define E_NOTIMP_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(NotImplementedError))
1520#define E_KEY_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(KeyError))
1521#ifndef MRB_NO_FLOAT
1522# define E_FLOATDOMAIN_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(FloatDomainError))
1523#endif
1524
1526MRB_API mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv);
1527MRB_API mrb_value mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv, mrb_value self, struct RClass *c);
1528
1529/* continue execution to the proc */
1530/* this function should always be called as the last function of a method */
1531/* e.g. return mrb_yield_cont(mrb, proc, self, argc, argv); */
1532mrb_value mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const mrb_value *argv);
1533
1534/* mrb_gc_protect() leaves the object in the arena */
1535MRB_API void mrb_gc_protect(mrb_state *mrb, mrb_value obj);
1536/* mrb_gc_register() keeps the object from GC. */
1537MRB_API void mrb_gc_register(mrb_state *mrb, mrb_value obj);
1538/* mrb_gc_unregister() removes the object from GC root. */
1539MRB_API void mrb_gc_unregister(mrb_state *mrb, mrb_value obj);
1540
1541/* type conversion/check functions */
1542MRB_API mrb_value mrb_ensure_array_type(mrb_state *mrb, mrb_value self);
1543MRB_API mrb_value mrb_check_array_type(mrb_state *mrb, mrb_value self);
1544MRB_API mrb_value mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash);
1545MRB_API mrb_value mrb_check_hash_type(mrb_state *mrb, mrb_value hash);
1546MRB_API mrb_value mrb_ensure_string_type(mrb_state *mrb, mrb_value str);
1547MRB_API mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str);
1548/* obsolete: use mrb_ensure_string_type() instead */
1549#define mrb_string_type(mrb, str) mrb_ensure_string_type(mrb,str)
1550#define mrb_to_str(mrb, str) mrb_ensure_string_type(mrb,str)
1551/* obsolete: use mrb_obj_as_string() instead */
1552#define mrb_str_to_str(mrb, str) mrb_obj_as_string(mrb, str)
1553/* check if val is an integer (including Bigint) */
1554MRB_API mrb_value mrb_ensure_integer_type(mrb_state *mrb, mrb_value val);
1555/* check if val fit in mrb_int */
1556MRB_API mrb_value mrb_ensure_int_type(mrb_state *mrb, mrb_value val);
1557#define mrb_as_int(mrb, val) mrb_integer(mrb_ensure_int_type(mrb, val))
1558/* obsolete: use mrb_ensure_int_type() instead */
1559#define mrb_to_integer(mrb, val) mrb_ensure_int_type(mrb, val)
1560#define mrb_to_int(mrb, val) mrb_ensure_int_type(mrb, val)
1561
1562/* string type checking (contrary to the name, it doesn't convert) */
1563MRB_API void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t);
1564MRB_API void mrb_check_frozen(mrb_state *mrb, void *);
1565MRB_API void mrb_check_frozen_value(mrb_state *mrb, mrb_value v);
1566MRB_API void mrb_define_alias(mrb_state *mrb, struct RClass *c, const char *a, const char *b);
1567MRB_API void mrb_define_alias_id(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b);
1568MRB_API const char *mrb_class_name(mrb_state *mrb, struct RClass* klass);
1569MRB_API void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val);
1570
1571MRB_API mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id);
1572
1573MRB_API mrb_bool mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid);
1574MRB_API mrb_bool mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, const struct RClass* c);
1575MRB_API mrb_bool mrb_func_basic_p(mrb_state *mrb, mrb_value obj, mrb_sym mid, mrb_func_t func);
1576
1577/* obsolete function(s); will be removed */
1578#define mrb_int(mrb, val) mrb_as_int(mrb, val)
1579
1586
1594MRB_API mrb_value mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int argc, const mrb_value *argv);
1595
1610MRB_API mrb_value mrb_fiber_yield(mrb_state *mrb, mrb_int argc, const mrb_value *argv);
1611
1618
1624#define E_FIBER_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(FiberError))
1625MRB_API void mrb_stack_extend(mrb_state*, mrb_int);
1626
1627/* temporary memory allocation, only effective while GC arena is kept */
1628MRB_API void* mrb_temp_alloc(mrb_state *mrb, size_t);
1629#define mrb_alloca(mrb, size) mrb_temp_alloc(mrb, size) /* for compatibility */
1630
1631MRB_API void mrb_state_atexit(mrb_state *mrb, mrb_atexit_func func);
1632
1633MRB_API void mrb_show_version(mrb_state *mrb);
1634MRB_API void mrb_show_copyright(mrb_state *mrb);
1635
1636MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
1637
1638#ifdef MRB_PRESYM_SCANNING
1639# include <mruby/presym/scanning.h>
1640#else
1641# include <mruby/presym.h>
1642#endif
1643
1644#if 0
1645/* memcpy and memset does not work with gdb reverse-next on my box */
1646/* use naive memcpy and memset instead */
1647#undef memcpy
1648#undef memset
1649static void*
1650mrbmemcpy(void *dst, const void *src, size_t n)
1651{
1652 char *d = (char*)dst;
1653 const char *s = (const char*)src;
1654 while (n--)
1655 *d++ = *s++;
1656 return d;
1657}
1658#define memcpy(a,b,c) mrbmemcpy(a,b,c)
1659
1660static void*
1661mrbmemset(void *s, int c, size_t n)
1662{
1663 char *t = (char*)s;
1664 while (n--)
1665 *t++ = c;
1666 return s;
1667}
1668#define memset(a,b,c) mrbmemset(a,b,c)
1669#endif
1670
1671#define mrb_int_hash_func(mrb,key) (uint32_t)((key)^((key)<<2)^((key)>>2))
1672
1673#define MRB_UNIQNAME(name) MRB_UNIQNAME_1(name, __LINE__)
1674#define MRB_UNIQNAME_1(name, line) MRB_UNIQNAME_2(name, line)
1675#define MRB_UNIQNAME_2(name, line) name##line
1676
1678
1679#endif /* MRUBY_H */
Specifies the number of arguments a function takes.
mruby Symbol.
mruby common platform definition"
#define MRB_INLINE
Declare a function as always inlined.
Definition common.h:97
#define MRB_END_DECL
End declarations in C mode.
Definition common.h:28
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition common.h:26
#define MRB_API
Declare a public mruby API function.
Definition common.h:108
#define mrb_noreturn
Shared compiler macros.
Definition common.h:50
garbage collector for mruby
void mrb_prepend_module(mrb_state *mrb, struct RClass *cla, struct RClass *prepended)
Prepends a module in another class or module.
Definition class.c:2187
mrb_value mrb_fiber_new(mrb_state *mrb, const struct RProc *proc)
Create a new Fiber from proc object.
mrb_int mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
Compares two mrb_value objects (obj1 and obj2).
Definition numeric.c:2248
mrb_value mrb_fiber_alive_p(mrb_state *mrb, mrb_value fib)
Check if a Fiber is alive.
mrb_int mrb_get_argc(mrb_state *mrb)
Retrieve number of arguments from mrb_state.
Definition class.c:1212
mrb_value mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep)
Executes a mruby bytecode sequence (iseq) within the VM.
Definition vm.c:1630
mrb_value mrb_fiber_yield(mrb_state *mrb, mrb_int argc, const mrb_value *argv)
Yield a Fiber.
mrb_value mrb_funcall(mrb_state *mrb, mrb_value val, const char *name, mrb_int argc,...)
Call existing Ruby functions.
Definition vm.c:605
void * mrb_basic_alloc_func(void *, size_t)
The memory allocation function.
Definition allocf.c:26
struct RClass * mrb_module_new(mrb_state *mrb)
Creates a new module, Module.
Definition class.c:3413
mrb_value mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *iseq)
Executes a sequence of mruby bytecode instructions.
Definition vm.c:2214
mrb_value mrb_funcall_id(mrb_state *mrb, mrb_value val, mrb_sym mid, mrb_int argc,...)
Calls a method on an object using a method ID.
Definition vm.c:641
struct RClass * mrb_define_module(mrb_state *mrb, const char *name)
Defines a new module.
Definition class.c:484
mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj)
Duplicate an object.
Definition class.c:4315
mrb_value mrb_funcall_argv(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv)
Call existing Ruby functions.
Definition vm.c:889
mrb_value mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *argv)
Initialize a new object instance of c class.
Definition class.c:3064
mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv)
Yields to a block with an array of arguments.
Definition vm.c:1320
void mrb_define_const(mrb_state *mrb, struct RClass *cla, const char *name, mrb_value val)
Defines a constant.
Definition variable.c:1513
const mrb_value * mrb_get_argv(mrb_state *mrb)
Retrieve an array of arguments from mrb_state.
Definition class.c:1240
void mrb_undef_method(mrb_state *mrb, struct RClass *cla, const char *name)
Undefines a method.
Definition class.c:3662
uint8_t mrb_code
mruby C API entry point
Definition mruby.h:148
mrb_int mrb_get_args_a(mrb_state *mrb, mrb_args_format format, void **ptr)
Array version of mrb_get_args()
Definition class.c:2000
mrb_bool mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name)
Returns an mrb_bool.
Definition class.c:713
mrb_value mrb_get_arg1(mrb_state *mrb)
Retrieve the first and only argument from mrb_state.
Definition class.c:1267
mrb_value mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int argc, const mrb_value *argv)
Resume a Fiber.
struct RClass * mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super)
Defines a new class.
Definition class.c:606
mrb_int mrb_get_args(mrb_state *mrb, mrb_args_format format,...)
Retrieve arguments from mrb_state.
Definition class.c:1970
mrb_state * mrb_open(void)
Creates new mrb_state.
Definition state.c:77
void mrb_include_module(mrb_state *mrb, struct RClass *cla, struct RClass *included)
Include a module in another class or module.
Definition class.c:2127
struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name)
Gets a child class.
Definition class.c:746
struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super)
Creates a new instance of Class, Class.
Definition class.c:3381
mrb_bool mrb_block_given_p(mrb_state *mrb)
Check if a block argument is given from mrb_state.
Definition class.c:1298
void mrb_define_module_function(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec)
Defines a module function.
Definition class.c:2744
void mrb_close(mrb_state *mrb)
Closes and frees a mrb_state.
Definition state.c:186
mrb_value mrb_str_new_cstr(mrb_state *, const char *)
Turns a C string into a Ruby string value.
Definition string.c:229
static mrb_value mrb_class_new_instance(mrb_state *mrb, mrb_int argc, const mrb_value *argv, struct RClass *c)
Definition mruby.h:686
void mrb_define_singleton_method(mrb_state *mrb, struct RObject *cla, const char *name, mrb_func_t fun, mrb_aspec aspec)
Defines a singleton method.
Definition class.c:2623
mrb_value mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep)
Enter the mruby VM and execute the proc.
Definition vm.c:3812
mrb_state * mrb_open_core(void)
Create new mrb_state with just the mruby core.
Definition state.c:44
mrb_bool mrb_class_defined(mrb_state *mrb, const char *name)
Returns an mrb_bool.
Definition class.c:683
void mrb_define_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec)
Defines a global function in Ruby.
Definition class.c:1113
struct RClass * mrb_exc_get_id(mrb_state *mrb, mrb_sym name)
Gets a exception class.
Definition class.c:811
mrb_value mrb_singleton_class(mrb_state *mrb, mrb_value val)
Returns the singleton class of an object.
Definition class.c:2593
struct RClass * mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, struct RClass *super)
Defines a new class under a given module.
Definition class.c:938
struct RClass * mrb_singleton_class_ptr(mrb_state *mrb, mrb_value val)
Returns the singleton class of an object.
Definition class.c:2547
mrb_value mrb_funcall_with_block(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv, mrb_value block)
Call existing Ruby functions with a block.
Definition vm.c:801
mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg)
Yields to a block with a single argument.
Definition vm.c:1347
struct RClass * mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name)
Gets a module defined under another module.
Definition class.c:840
mrb_value mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv, mrb_value self, struct RClass *c)
Yields to a block with a specific self object and class context.
Definition vm.c:1296
const char * mrb_args_format
Format specifiers for {mrb_get_args} function.
Definition mruby.h:1004
void mrb_stack_extend(mrb_state *, mrb_int)
Extends the VM stack.
Definition vm.c:226
mrb_bool mrb_obj_respond_to(mrb_state *mrb, struct RClass *c, mrb_sym mid)
Returns true if obj responds to the given method.
Definition class.c:3189
void mrb_undef_class_method(mrb_state *mrb, struct RClass *cls, const char *name)
Undefine a class method.
Definition class.c:3709
struct RClass * mrb_module_get(mrb_state *mrb, const char *name)
Gets a module.
Definition class.c:871
struct RClass * mrb_class_get(mrb_state *mrb, const char *name)
Gets a class.
Definition class.c:778
mrb_sym mrb_intern_cstr(mrb_state *mrb, const char *str)
Create a symbol from C string.
Definition symbol.c:491
mrb_value(* mrb_func_t)(mrb_state *mrb, mrb_value self)
Function pointer type for a function callable by mruby.
Definition mruby.h:227
mrb_bool mrb_recursive_func_p(mrb_state *mrb, mrb_sym mid, mrb_value obj1, mrb_value obj2)
Check if a C function call is recursive.
Definition kernel.c:177
void mrb_define_class_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec)
Defines a class method.
Definition class.c:2672
Preallocated Symbols
Definition object.h:19
Class class.
Definition class.h:17
Proc class.
Definition proc.h:26
Definition object.h:42
Definition object.h:34
Definition proc.h:53
Definition variable.c:16
Definition mruby.h:239
Definition mruby.h:165
Definition mruby.h:256
Definition mruby.h:196
Definition gc.h:38
Definition irep.h:55
Definition variable.c:258
Definition throw.h:77
Definition mruby.h:1055
Definition mruby.h:229
Definition class.h:145
Definition mruby.h:280
Definition symbol.c:127
Definition boxing_nan.h:40
mruby value definitions
mruby version definition